<?php

/**
 * Permite administrar el crud de NiniosInfoCartaSemanal
 */
class NiniosInfoCartasemanalController extends AweController {

    /**
     * @var string the default layout for the views. Defaults to '//layouts/column2', meaning
     * using two-column layout. See 'protected/views/layouts/column2.php'.
     */
    public $layout = '//layouts/column2';
    public $defaultAction = 'admin';

    /**
     * Displays a particular model.
     * @param integer $id the ID of the model to be displayed
     */
    public function actionView($id) {
        $model = $this->loadModel($id);

        try {
            $menuSemanal = $this->detalleInfoCartaSemanal($model->info_carta_semanal_id);
            if (!empty($menuSemanal)) {
                $this->render('view', array(
                    'model' => $this->loadModel($id), // Modelo NiniosInfoCartasemanal
                    'infoCartaSemanal' => $menuSemanal[0], //Modelo InfoCartaSemanal
                    'tiempoComida' => $menuSemanal[1],
                    'arregloFechaIni' => $menuSemanal[2],
                    'arregloFechaFin' => $menuSemanal[3],
                ));
            } else {
                $this->render('view', array(
                    'model' => $this->loadModel($id),
                ));
            }
        } catch (Exception $exc) {
            Yii::app()->user->setFlash('error', $exc->getMessage());
            $this->redirect('admin');
        }
    }

    /**
     * Creates a new model.
     * If creation is successful, the browser will be redirected to the 'view' page.
     */
    public function actionCreate() {
        $model = new NiniosInfoCartasemanal;

        $this->performAjaxValidation($model, 'ninios-info-cartasemanal-form');

        if (isset($_POST['NiniosInfoCartasemanal'])) {
            $model->attributes = $_POST['NiniosInfoCartasemanal'];
            if ($model->save()) {
                $this->redirect(array('view', 'id' => $model->id));
            }
        }

        $this->render('create', array(
            'model' => $model,
        ));
    }

    /**
     * Updates a particular model.
     * If update is successful, the browser will be redirected to the 'view' page.
     * @param integer $id the ID of the model to be updated
     */
    public function actionUpdate($id) {
        $model = $this->loadModel($id);

        $this->performAjaxValidation($model, 'ninios-info-cartasemanal-form');

        if (isset($_POST['NiniosInfoCartasemanal'])) {
            $model->attributes = $_POST['NiniosInfoCartasemanal'];
            if ($model->save()) {
                $this->redirect(array('view', 'id' => $model->id));
            }
        }

        $this->render('update', array(
            'model' => $model,
        ));
    }

    /**
     * Deletes a particular model.
     * If deletion is successful, the browser will be redirected to the 'admin' page.
     * @param integer $id the ID of the model to be deleted
     */
    public function actionDelete($id) {
        if (Yii::app()->request->isPostRequest) {
            // we only allow deletion via POST request
            $this->loadModel($id)->delete();

            // if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser
            if (!isset($_GET['ajax']))
                $this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('admin'));
        } else
            throw new CHttpException(400, 'Invalid request. Please do not repeat this request again.');
    }

    /**
     * Manages all models.
     */
    public function actionAdmin() {
        $model = new NiniosInfoCartasemanal('search');
        $model->unsetAttributes(); // clear any default values
        $query = $model->contarDatos();
        if ($query > 0) {
            $columns = $model->searchColumns();
            $widget = $this->createWidget('ext.EDataTables.EDataTables', array(
                'id' => 'niniosInfoCartasemanal-grid',
                'template' => '{items}{summary}{pager}',
                'dataProvider' => Yii::app()->user->checkAccess("admin") || Yii::app()->user->checkAccess("supervisor") ? $model->search($columns) : $model->de_institucion()->search($columns),
                'itemsCssClass' => 'table table-striped table-hover compact row-border',
                'ajaxUrl' => $this->createUrl($this->getAction()->getId()),
                'columns' => array(
                    array(
                        'header' => 'Nombres',
                        'name' => 'ninios_id',
                        'value' => '$data->ninios_id ? $data->infantes->nombre_completo : ""'
                    ),
                    array(
                        'header' => 'Entidad Ejecutora',
                        'name' => 'info_carta_semanal_id',
                        'value' => '$data->info_carta_semanal_id ? $data->infoCartaSemanals->entidad_ejecutora :""'
                    ),
                    array(
                        'header' => 'Responsable',
                        'name' => 'info_carta_semanal_id',
                        'value' => '$data->info_carta_semanal_id ? $data->infoCartaSemanals->responsable :""'
                    ),
                    array(
                        'header' => 'Fecha Inicio',
                        'name' => 'info_carta_semanal_id',
                        'value' => '$data->info_carta_semanal_id ? Util::formatDate($data->infoCartaSemanals->fecha_inicial, "Y/m/d") :""'
                    ),
                    array(
                        'header' => 'Fecha Fin',
                        'name' => 'info_carta_semanal_id',
                        'value' => '$data->info_carta_semanal_id ? Util::formatDate($data->infoCartaSemanals->fecha_fin, "Y/m/d") :""'
                    ),
                    array(
                        'header' => 'Nombre CIBV',
                        'name' => 'info_carta_semanal_id',
                        'value' => '$data->info_carta_semanal_id ? $data->infoCartaSemanals->nombre_CIBV :""'
                    ),
                    array(
                        'class' => 'ext.EDataTables.EButtonColumn',
                        'template' => '{ver} {observaciones}',
                        'htmlOptions' => array('class' => 'span4'),
                        'buttons' => array(
                            'ver' => array('label' => '<button class="btn btn-info"><i class="icon-search"></i></button>',
                                'options' => array(
                                    'title' => Yii::t('AweCrud.app', 'Ver Menu Semanal'),
                                    "id" => '$data->id',
                                ),
                                'type' => 'raw',
                                'url' => 'Yii::app()->createUrl("ninio/niniosInfoCartasemanal/view", array("id" => $data->id))',
                            ),
                            'observaciones' => array('label' => '<button class="btn btn-success"><i class="icon-pencil"></i></button>',
                                'options' => array(
                                    'title' => Yii::t('AweCrud.app', 'Agregar Observaciones'),
                                    "id" => '$data->id',
                                ),
                                'type' => 'raw',
                                'visible' => '(Yii::app()->user->checkAccess("admin")||Yii::app()->user->checkAccess("institucion"))? true : false',
                                'url' => 'Yii::app()->createUrl("ninio/niniosInfoCartasemanal/agregarObservaciones", array("id" => $data->id))',
                            ),
                        ),
                    ),
                ),
            ));
            if (Yii::app()->getRequest()->getIsAjaxRequest()) {
                echo json_encode($widget->getFormattedData(intval($_GET['sEcho'])));
                Yii::app()->end();
                return;
            }
            $this->render('admin', array('widget' => $widget,));
        } else {
            $this->render('empty', array());
        }
    }

    /**
     * Returns the data model based on the primary key given in the GET variable.
     * If the data model is not found, an HTTP exception will be raised.
     * @param integer the ID of the model to be loaded
     */
    public function loadModel($id, $modelClass = __CLASS__) {
        $model = NiniosInfoCartasemanal::model()->findByPk((int) $id);
        if ($model === null)
            throw new CHttpException(404, 'The requested page does not exist.');
        return $model;
    }

    /**
     * Performs the AJAX validation.
     * @param CModel the model to be validated
     */
    protected function performAjaxValidation($model, $form = null) {
        if (isset($_POST['ajax']) && $_POST['ajax'] === 'ninios-info-cartasemanal-form') {
            echo CActiveForm::validate($model);
            Yii::app()->end();
        }
    }

    /**
     * @author Sofía Mejía <asmejia@utn.edu.ec>
     * action que permite ver una lista del modelo infoCartaSemanal
     * y a su vez realizar una busqueda en una lista del modelo ninios
     */
    public function actionAjaxMaestro() {

        $model = new NiniosInfoCartasemanal;
        $submodel = new Ninios('search');
        $infomodel = new InfoCartaSemanal('search');
        $submodel->unsetAttributes(); // clear any default values
        if (isset($_GET['Ninios']))
            $submodel->attributes = $_GET['Ninios'];

        $this->render('_formMaster', array(
            'model' => $model,
            'submodel' => $submodel,
            'infomodel' => $infomodel,
        ));
    }

    /**
     * @author Sofía Mejía <asmejia@utn.edu.ec>
     * action que recupera el id del infoCartaSemanal seleccionado
     * y un string con todos los id de los niños seleccionados una vez guardados
     * redirecciona al admin caso contrario redirije al actionajaxMaestro
     * @param int $id del infoCartaSemanal Seleccionado
     * @param string $select que contiene todos los id de los niños seleccionados
     */
    public function actionAjaxCreate($id, $select) {
        if (isset($id) && isset($select)) {
            $check = explode(',', $select);
            $guardo = NiniosInfoCartasemanal::model()->guardarAjax($id, $check);
            if ($guardo) {
                $model = new NiniosInfoCartasemanal;
                $this->redirect('admin', array());
            }
        } else {
            $model = new NiniosInfoCartasemanal;
            $this->redirect('ajaxMaestro');
        }
    }

    /**
     * Busca el numero de ninios correspondiente al infoCartaSemanalSeleccionado
     * @author Sofia Mejia <asmejia@utn.edu.ec>
     * @param int $id del InfoCartaSemanal seleccionado
     */
    public function actionGetNumNinios($id) {
        if (Yii::app()->request->isAjaxRequest) {
            $model = InfoCartaSemanal::model()->findByPk((int) $id);
            echo CJSON::encode($model['oldValues']['numero_ninos']);
        }
    }

    /**
     * recupera todos los datos del menu semanal para presentarlos en una tabla
     * @param int $id  del infoCartaSemanal seleccionado
     * @return array con los datos necesarios para crear la tabla 
     */
    public function detalleInfoCartaSemanal($id) {
        $datos = InfoCartaSemanal::model()->datos_para_pdf($id);
        if ($datos != "") {
            $model = $datos[0];
            $tiempoComida = $datos[1];
            $arregloFechaIni = date_parse($model->fecha_inicial);
            $arregloFechaFin = date_parse($model->fecha_fin);
            return array($model, $tiempoComida, $arregloFechaIni, $arregloFechaFin);
        }
    }

    /**
     * Permite actualizar mediante ajax el nombre del menu de acuerdo al dia 
     * de la semana y tiempo de comida 
     * @author Sofia Mejia <asmejia@utn.edu.ec>
     */
    public function actionCargarCartaNutricional() {
        $dia = $_POST['NiniosInfoCartasemanal']['dia'];
        $tiempo_comida = $_POST['NiniosInfoCartasemanal']['tiempo_comida'];
        $infoCartaSemanal = $_POST['NiniosInfoCartasemanal']['info_carta_semanal_id'];
        $cartaSemanal = CartaSemanal::model()->de_Dia_InfoCartaSemanal_Id($infoCartaSemanal, $dia)->findAll();
        $menu_id = "";
        $menu_nombre = "";
        if (!empty($dia) && !empty($tiempo_comida)) {
            foreach ($cartaSemanal as $value) {
                $cartaNutricional = CartaNutricional::model()->findByPk((int)$value->carta_nutricional_id);
                if ($cartaNutricional->tipo_carta_id == $tiempo_comida && $value->dia_semana == $dia) {
                    $menu_id = $cartaNutricional->id;
                    $menu_nombre = $cartaNutricional->nombre;
                }
            }
            if (isset($menu_nombre)) {
                echo $menu_nombre;
                echo CHtml::tag('input', array('class' => 'hidden', 'id' => 'menu', 'carta_nutricional_id' => $menu_id, 'value' => $menu_nombre));
            }
        }
    }

    /**
     * Agrega o actualuza las observaciones de acuerdo al id
     * @param int $id del infoCartaSemanal seleccionado
     * @author Sofia Mejia <asmejia@utn.edu.ec>
     */
    public function actionAgregarObservaciones($id) {
        $model = $this->loadModel($id);
        $ninio = Ninios::model()->findByPk((int) $model->ninios_id);
        if (isset($_POST['NiniosInfoCartasemanal'])) {

            $model->attributes = $_POST['NiniosInfoCartasemanal'];
            $model->observaciones = $model->observaciones . ";";


            if ($model->save()) {
                $this->redirect(array('admin'));
            }
        }
        if ($ninio->fecha_salida == null) {
            $this->render('observaciones', array(
                'model' => $model,
            ));
        } else {
            Yii::app()->user->setFlash('error', 'no se puede agregar observaciones, el infante ya no pertenece al CIBV');
            $this->redirect(array('admin'));
        }
    }

    /**
     * @author Sofia Mejia <asmejia@utn.edu.ec>
     * Carga las observaciones de acuerdo a la id
     * @param int $id del infoCartaSemanal seleccionado
     */
    public function actionObtenerObservacion($id) {
        if (Yii::app()->request->isAjaxRequest) {
            $model = $this->loadModel($id);
            echo json_encode($model->observaciones);
        }
    }

}
